package com.koi.common.satoken;

import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import com.koi.common.constants.SaTokenSessionConstants;
import lombok.extern.slf4j.Slf4j;

import java.util.Date;

/**
 * @author ･ᴗ･
 * @description [KoiLoginUtil]
 */
@Slf4j
public class KoiLoginUtil {

    /** 注意：此工具类所有信息，都在登录接口获取并配置里面 */

    /**
     * 登录系统 基于 设备类型，针对相同用户体系不同设备
     *
     * @param koiLoginUser 登录用户信息
     * @param model        配置参数
     * @description [Sa-Token登录方法]
     * @author ･ᴗ･
     */
    public static void login(KoiLoginUser koiLoginUser, SaLoginModel model) {
        // 登录用户ID
        log.info("PC登录userId：{}", koiLoginUser.getUserId());
        StpUtil.login(koiLoginUser.getUserId(), model);
    }

    /**
     * @description [获取当前用户信息]
     * @author ･ᴗ･
     */
    public static KoiLoginUser getLoginUser() {
        // 如果登录使用 StpUtil.getTokenSession().set(SaTokenSessionConstants.LOGIN_USER, koiLoginUser); 则使用下方：
        // return (KoiLoginUser) StpUtil.getTokenSession().get(SaTokenSessionConstants.LOGIN_USER);
        // 如果登录使用 StpUtil.getSession().set(SaTokenSessionConstants.LOGIN_USER, koiLoginUser); 则使用下方：
        return (KoiLoginUser) StpUtil.getSession().get(SaTokenSessionConstants.LOGIN_USER);
    }

    /**
     * @description [获取当前用户ID]
     * @author ･ᴗ･
     */
    public static Long getUserId() {
        return getLoginUser().getUserId();
    }

    /**
     * @description [是否超级管理员]
     * @author ･ᴗ･
     */
    public static boolean getIsKoiAdmin() {
        return getLoginUser().getIsKoiAdmin();
    }

    /**
     * @description [获取当前用户登录账号]
     * @author ･ᴗ･
     */
    public static String getLoginName() {
        return getLoginUser().getLoginName();
    }

    /**
     * @description [获取当前用户头像]
     * @author ･ᴗ･
     */
    public static String getAvatar() {
        return getLoginUser().getAvatar();
    }

    /**
     * @description [获取当前用户手机号]
     * @author ･ᴗ･
     */
    public static String getPhone() {
        return getLoginUser().getPhone();
    }

    /**
     * @description [获取当前用户邮箱]
     * @author ･ᴗ･
     */
    public static String getEmail() {
        return getLoginUser().getEmail();
    }

    /**
     * @description [获取用户真实姓名]
     * @author ･ᴗ･
     */
    public static String getUserName() {
        return getLoginUser().getUserName();
    }

    /**
     * @description [获取当前用户性别]
     * @author ･ᴗ･
     */
    public static String getSex() {
        return getLoginUser().getSex();
    }

    /**
     * @description [获取当前用户登录时间]
     * @author ･ᴗ･
     */
    public static Date getLoginTime() {
        return getLoginUser().getLoginTime();
    }

    /**
     * @description [获取当前用户创建时间]
     * @author ･ᴗ･
     */
    public static Date getCreateTime() {
        return getLoginUser().getCreateTime();
    }

    /**
     * @description [获取当前用户部门ID-此表也可改为城市信息]
     * @author ･ᴗ･
     */
    public static String getDeptId() {
        return getLoginUser().getDeptId();
    }

    /**
     * @description [获取当前用户部门名称]
     * @author ･ᴗ･
     */
    public static String getDeptName() {
        return getLoginUser().getDeptName();
    }

    /**
     * @description [获取当前用户登录IP地址]
     * @author ･ᴗ･
     */
    public static String getIpAddress() {
        return getLoginUser().getIpAddress();
    }

    /**
     * @description [获取当前用户登录地址]
     * @author ･ᴗ･
     */
    public static String getLoginIp() {
        return getLoginUser().getLoginAddress();
    }

    /**
     * @description [获取当前用户浏览器类型-暂未补充]
     * @author ･ᴗ･
     */
    public static String getBrowser() {
        return getLoginUser().getBrowser();
    }

    /**
     * @description [获取当前用户操作系统-暂未补充]
     * @author ･ᴗ･
     */
    public static String getOs() {
        return getLoginUser().getOs();
    }

    /**
     * @description [获取当前用户设备名字-暂未补充]
     * @author ･ᴗ･
     */
    public static String getDeviceName() {
        return getLoginUser().getDeviceName();
    }

    /**
     * @description [获取当前用户城市ID-可新增城市表]
     * @author ･ᴗ･
     */
    public static String getCityId() {
        return getLoginUser().getCityId();
    }

}
